package io.gitee.loulan_yxq.owner.poi.excel.tool;

import io.gitee.loulan_yxq.owner.core.collection.ArrayTool;
import io.gitee.loulan_yxq.owner.core.collection.CollTool;
import io.gitee.loulan_yxq.owner.core.map.MapTool;
import io.gitee.loulan_yxq.owner.core.tool.ObjectTool;
import io.gitee.loulan_yxq.owner.core.tool.ReflectTool;
import io.gitee.loulan_yxq.owner.core.tool.StrTool;
import io.gitee.loulan_yxq.owner.poi.excel.entity.ExcelExportConfiguration;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/*********************************************************
 ** 写excel的接口
 ** <br><br>
 ** Date: Created in 2022/3/1  16:44
 ** @author loulan
 ** @version 0.0.0
 *********************************************************/
public interface ExcelWriter {

    /**
     * 写excel表到指定的输出流
     *
     * @param os        输出流
     * @param data      要写数据的list集合
     * @param sheetName 工作簿得名称
     * @author :loulan
     */
    void write(OutputStream os, String sheetName, List<?> data);

    /**
     * 写数据到指定的输出流
     *
     * @param os          输出流
     * @param data        要写数据的list集合
     * @param headerAlias 表头对应的别名，这个是对应list数据中对象的属性对应得名称，比如指定一个map数据为，key='uername',value='用户名'
     * @param sheetName   工作簿得名称
     * @author :loulan
     */
    void write(OutputStream os, Map<String, String> headerAlias, String sheetName, List<?> data);

    /**
     * 写数据到指定的输出流
     *
     * @param exportConfiguration 导出配置对象
     * @author :loulan
     */
    void write(ExcelExportConfiguration exportConfiguration);

    /**
     * 关闭excel的工作簿
     *
     * @author :loulan
     */
    void close();
}
